#ifndef MODELO_H_
#define MODELO_H_

/*****************************************************************
 *	modelo.h
 * 
 *  Descripcion: Clase que pertenece a la aplicacion.
 *  
 * **************************************************************/

#include <map>
#include <stdexcept>
#include "excep_arch_existente_modelo.h"
#include "arch_datos.h"
#include "archivosFactory.h"
#include <ctime>

class Modelo{
	
	private:

		bool terminar;
		
		//Buffer *buffer;
		std::map< std::string, ArchivoDatos* > tabla_archivos;
		
		Modelo(Modelo &m){}
		
		Modelo& operator=(Modelo &m){return m;}
		
		void quitar_archivo();
	
	public:
		/*
		 * 	Constructor de la clase
		 */
		Modelo(unsigned char seg);
		
		/*
		 * 	Destructor de la clase
		 */
		~Modelo();
		
		/*
		 * Agrega un archivo al modelo. Si ya exisita uno con ese
		 * nombre tira una excepcion
		 */
		 void agregar_archivo(ArchivoDatos * a) throw(ExcepArchExistenteModelo);  
		 
		 /*
		  * Devuelve el archivo con el nombre pasado por param.
		  * Si no existe lanza excep
		  */
		  ArchivoDatos& get_archivo(std::string &nombre) throw(ExcepArchInexistente);
				
		/*
		 * Termina con la ejecucion del modelo una vez que concluyen 
		 * con las operaciones que estaba ejecutando
		 */
		void finalizar();
		
		bool esta_terminado();
		
		/*
		 * Quita el archivo del modelo y lo elimina del disco.
		 * Si el archivo no existia fisicamente, lanza una excepcion.
		 */ 
		void eliminar_archivo(std::string& nombre) throw (ExcepArchInexistente);
		
};



#endif /*MODELO_H_*/
